package com.feib.soeasy.model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * @title (#)PayerTemp.java<br>
 * @description 繳款人暫存資料<br>
 * @author Anson Tsai<br>
 * @version 1.0.0 2010/11/25
 * @copyright Far Eastern International Bank Copyright (c) 2010<br>
 * @2011/2/12 create by Anson Tsai<br>
 */
@Entity
@Table(name = "PAYER_TEMP")
public class PayerTemp extends AuditEntity {

    /**
     * <code>serialVersionUID</code> 的註解
     */
    private static final long serialVersionUID = 1L;

    /**
     * 繳款人狀態-放行成功
     */
    public static final String PAYER_STATUS_CONFIRM_Y = "Y";

    /**
     * 繳款人狀態-放行失敗
     */
    public static final String PAYER_STATUS_CONFIRM_N = "N";

    /**
     * 交易紀錄狀態-新增
     */
    public static final String PAYER_RECORD_SATAUS_ADD_MODE = "A";
    
    /**
     * 交易紀錄狀態-維護
     */    
    public static final String PAYER_RECORD_SATAUS_UPDATE_MODE = "U";
    
    /**
     * 交易紀錄狀態-刪除
     */
    public static final String PAYER_RECORD_SATAUS_DELETE_MODE = "D";
    
    /**
     * 繳費方式-列印繳款單
     */
    public static final Integer PAYMENT_TYPE_PRINT = new Integer(0);

    /**
     * 繳費方式-信用卡扣款
     */
    public static final Integer PAYMENT_TYPE_CREDIT_CARD = new Integer(1);

    /**
     * PK in Table
     */
    private Long payerTempPk;

    /**
     * 所屬繳款人匯入檔
     */
    private UploadFile uploadFile;

    /**
     * 所屬帳單業者</br> 要等於 UPLOADFILE.GROUP</br>
     */
    private Group group;

    /**
     * 繳款人編號
     */
    private String payerNo;

    /**
     * 姓名
     */
    private String payerName;

    /**
     * Email
     */
    private String payerEmail;

    /**
     * Phone number
     */
    private String payerTelNo;

    /**
     * Mobile number
     */
    private String payerCellNo;

    /**
     * 繳款人狀態<br>
     * null: 待放行<br>
     * Y: 放行<br>
     * N: 退回<br>
     */
    private String payerStatus;

    /**
     * 交易紀錄狀態<br>
     * A: 新增<br>
     * U: 更新<br>
     * D: 刪除<br>
     */
    private String recordStatus;

    /**
     * 坪數
     */
    private Double levelGround;

    /**
     * 車位數
     */
    private Integer parkingCount;

    /**
     * 門牌號碼
     */
    private String houseNo;

    /**
     * 聯絡地址
     */
    private String payerAddress;

    /**
     * 備註
     */
    private String payerMemo;

    /**
     * 確認放行日期
     */
    private Date confirmDate;
    
    /**
     * 確認放行人員
     */
    private User confirmUser;
    
    /**
     * @return 傳回 payerTempPk。
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PAYER_TEMP_PK", nullable = false)
    public Long getPayerTempPk() {
        return payerTempPk;
    }

    /**
     * @param payerTempPk 要設定的 payerTempPk。
     */
    public void setPayerTempPk(Long payerTempPk) {
        this.payerTempPk = payerTempPk;
    }

    /**
     * @return 傳回 uploadFile。
     */
    @ManyToOne
    @JoinColumn(name = "UPLOAD_FILE_PK")
    public UploadFile getUploadFile() {
        return uploadFile;
    }

    /**
     * @param uploadFile 要設定的 uploadFile。
     */
    public void setUploadFile(UploadFile uploadFile) {
        this.uploadFile = uploadFile;
    }

    /**
     * @return 傳回 group。
     */
    @ManyToOne
    @JoinColumn(name = "GROUP_PK", nullable = false)
    public Group getGroup() {
        return group;
    }

    /**
     * @param group 要設定的 group。
     */
    public void setGroup(Group group) {
        this.group = group;
    }

    /**
     * @return 傳回 payerName。
     */
    @Column(name = "PAYER_NAME", length = 20)
    public String getPayerName() {
        return payerName;
    }

    /**
     * @param payerName 要設定的 payerName。
     */
    public void setPayerName(String payerName) {
        this.payerName = payerName;
    }

    /**
     * @return 傳回 payerEmail。
     */
    @Column(name = "PAYER_EMAIL", length = 100)
    public String getPayerEmail() {
        return payerEmail;
    }

    /**
     * @param payerEmail 要設定的 payerEmail。
     */
    public void setPayerEmail(String payerEmail) {
        this.payerEmail = payerEmail;
    }

    /**
     * @return 傳回 payerTelNo。
     */
    @Column(name = "PAYER_TELNO", length = 20)
    public String getPayerTelNo() {
        return payerTelNo;
    }

    /**
     * @param payerTelNo 要設定的 payerTelNo。
     */
    public void setPayerTelNo(String payerPhone) {
        this.payerTelNo = payerPhone;
    }

    /**
     * @return 傳回 payerCellNo。
     */
    @Column(name = "PAYER_CELLNO", length = 20)
    public String getPayerCellNo() {
        return payerCellNo;
    }

    /**
     * @param payerCellNo 要設定的 payerCellNo。
     */
    public void setPayerCellNo(String payerMobile) {
        this.payerCellNo = payerMobile;
    }

    /**
     * @return 傳回 payerStatus。
     */
    @Column(name = "PAYER_STATUS", length = 1)
    public String getPayerStatus() {
        return payerStatus;
    }

    /**
     * @param payerStatus 要設定的 payerStatus。
     */
    public void setPayerStatus(String payerStatus) {
        this.payerStatus = payerStatus;
    }

    /**
     * @return 傳回 recordStatus。
     */
    @Column(name = "RECORD_STATUS", length = 1)
    public String getRecordStatus() {
        return recordStatus;
    }

    /**
     * @param recordStatus 要設定的 recordStatus。
     */
    public void setRecordStatus(String recordStatus) {
        this.recordStatus = recordStatus;
    }

    /**
     * @return 傳回 levelGround。
     */
    @Column(name = "LEVEL_GROUND", length = 5)
    public Double getLevelGround() {
        return levelGround;
    }

    /**
     * @param levelGround 要設定的 levelGround。
     */
    public void setLevelGround(Double levelGround) {
        this.levelGround = levelGround;
    }

    /**
     * @return 傳回 parkingCount。
     */
    @Column(name = "PARKING_COUNT", length = 5)
    public Integer getParkingCount() {
        return parkingCount;
    }

    /**
     * @param parkingCount 要設定的 parkingCount。
     */
    public void setParkingCount(Integer parkingCount) {
        this.parkingCount = parkingCount;
    }

    

    /**
     * @return 傳回 houseNo。
     */
    @Column(name = "HOUSE_NO", length = 200)
    public String getHouseNo() {
        return houseNo;
    }

    /**
     * @param houseNo 要設定的 houseNo。
     */
    public void setHouseNo(String houseNumber) {
        this.houseNo = houseNumber;
    }

    /**
     * @return 傳回 payerAddress。
     */
    @Column(name = "PAYER_ADDRESS", length = 255)
    public String getPayerAddress() {
        return payerAddress;
    }

    /**
     * @param payerAddress 要設定的 payerAddress。
     */
    public void setPayerAddress(String payerAddress) {
        this.payerAddress = payerAddress;
    }

    /**
     * @return 傳回 payerMemo。
     */
    @Column(name = "PAYER_MEMO", length = 255)
    public String getPayerMemo() {
        return payerMemo;
    }

    /**
     * @param payerMemo 要設定的 payerMemo。
     */
    public void setPayerMemo(String payerMemo) {
        this.payerMemo = payerMemo;
    }

    /**
     * @return 傳回 payerNo。
     */
    @Column(name = "PAYER_NO", length = 20)
    public String getPayerNo() {
        return payerNo;
    }

    /**
     * @param payerNo 要設定的 payerNo。
     */
    public void setPayerNo(String payerNo) {
        this.payerNo = payerNo;
    }

    
    /**
     * @return 傳回 confirmDate。
     */
    @Column(name="CONFIRM_DATE")
    public Date getConfirmDate() {
        return confirmDate;
    }

    
    /**
     * @param confirmDate 要設定的 confirmDate。
     */
    public void setConfirmDate(Date confirmDate) {
        this.confirmDate = confirmDate;
    }

    
    /**
     * @return 傳回 confirmUser。
     */
    @ManyToOne
    @JoinColumn(name="CONFIRM_USER_PK")    
    public User getConfirmUser() {
        return confirmUser;
    }

    
    /**
     * @param confirmUser 要設定的 confirmUser。
     */
    public void setConfirmUser(User confirmUser) {
        this.confirmUser = confirmUser;
    }
    
}
